package com.lmf.juc.Lock.case4;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 演示 HashMap() 线程不安全的解决办法：
 *      1.使用 ConcurrentHashMap<>() 集合，线程安全
 */
public class ThreadDemo4 {

    public static void main(String[] args) {
        /**
         * HashMap<>()：由于底层没有使用 Synchronized 关键字，
         *  所以在出现多线程高并发，同时去arrayList集合中，进行读取写入操作时，就会发生并发修改异常
         */
//        Map<String ,String> map = new HashMap<>();

        /**
         * 解决办法：使用 ConcurrentHashMap<>() 集合，线程安全
         */
        Map<String ,String> map = new ConcurrentHashMap<>();
        for (int i = 0; i < 30; i++) {
            String key = String.valueOf(i);
            new Thread(() -> {
                String id = UUID.randomUUID().toString().substring(0,8);
                map.put(key,id);
                System.out.println(map);
            },String.valueOf(i)).start();
        }
    }
}
